const async = require('async')
const util = require('util');

/**
 * async.parallelLimit 方法在文档中位于 Controll Flow 章节，表明这个方法是用来做流程控制的，
 * async.eachLimit 方法位于 Collections 章节，表明这个方法是用来做数据处理的。
 * 在实际开发中我们可以使用这两个方法来完成同样的工作
 */

/**
 * async.eachLimit 方法接受四个参数
 * 第一个参数为原始数据数组，
 * 第二个参数为每次并行处理的数据量，
 * 第三个参数为需要为数据进行的处理，
 * 第四个参数为回调函数
 */
let userEmailList = [ 'a@example.com', 'b@example.com', 'z@example.com', 'y@example.com'];
let limit = 3;

async.eachLimit(userEmailList, limit, function(userEmailList_data, next) {
  for (let i = 0; i < userEmailList.length; i++) {
    console.log('userEmailList_data:' + userEmailList_data);
    console.log('i=' + i);
  } 
})

// async.eachLimit(userEmailList, limit, function(error, data) {
//   for (let i = 0; i < userEmailList.length; i++) {
//     console.log('i=' + i)
//   } 
//   console.log('data:' + data);
// })



























//  let processer = function (email) {
//      sendEmail(email, function (error) {
//          return callback(error, result);
//      });
//  }
//  async.eachLimit(userEmailList, limit, processer, function (error, result){
//      console.log(error);
//  });
 